package chapter5

import (
	"fmt"
)

func Test2()  {
	a:=[3]int{}
	b:=[4]int{1,3:10}//3:10是指定位置初始化，即指定3这个位置初始化为10
	c:=[...]int{4,5,6,7}
	e:=[...]int{5:5}
	fmt.Println(a,b,c,e)
	fmt.Println("----------------------------------")
	type stu struct {
		name string
		age int
	}
	stus:=[...]stu{
		{"wnag",20},
		{"li",19},
	}
	fmt.Printf("%#v\n",stus)
	//定义多维数组时，只允许第一维使用...
	fmt.Println("-----------------------------------")
	nums:=[...][2]int{
		{1,2},
		{3,4},
	}
	fmt.Println(nums)
	fmt.Println("--------------------------------------")
	aa:=[2]int{1,2}
	bb:=[2]int{0,2}//会比较元素
	fmt.Println(aa==bb)
	fmt.Println("-------------------------------------")
	mk:=[3]int{1,2,3}
	p:=&mk
	p[0]++//这样就相当于直接引用了，相当于（*p）[0]
	fmt.Printf("%T %T\n",p[0],p)
	fmt.Println("---------------------------------------")
	//数组的赋值，传参都会复制整个数据
	nums2:=[2]int{1,2}
	fmt.Printf("%p %v\n",&nums2,nums2)
	fmt.Println()
	copy(nums2)
	fmt.Println("-------------------------------------")
	//当然，你如果想传的更好，那么你就用指针或者切片
	fmt.Printf("%p %v\n",&nums2,nums2)
	copyslice(&nums2)
	fmt.Println("-------------------------------------")
	var numsk []int
	fmt.Println(numsk==nil)
	numsk=append(numsk,2)
	fmt.Println(numsk==nil)
	fmt.Println(numsk)
	fmt.Println("------------------------------")

}

func copyslice(a *[2]int){
	fmt.Printf("%p %v\n",a,*a)
}

func copy(s [2]int)  {
	fmt.Printf("%p %v",&s,s)
}
